Sesión 02.1: Introducción a las estructuras de control
CONAHCYT-Universidad de Guadalajara
7 de enero de 2025
dplyr.Las estructuras de control establecen condicionales en nuestros programas. Por ejemplo, ¿qué condiciones deben cumplirse para realizar una operación? o ¿qué debe ocurrir para ejecutar una función?.
En otras palabras, determinan la lógica y el orden en el que ocurren las operaciones, en especial al definir funciones.
Las estructuras de control más usadas en R son las siguientes:
| Estructura de control | Descripción |
|---|---|
if, else |
Sí, de otro modo |
for |
Para cada uno en |
while |
Mientras |
break |
Interrupción |
next |
Siguiente |
if y elseif (si) se usa cuando queremos que una operación se ejecute unicamente cuando se cumple una condición.if y elsesi, iniciamos nuestra función con if():() insertamos la condición que queremos evaluar:{} para definir el código que queremos que se ejecute cuando se cumple la condición:if y elseelse{} para establecer la acción a ejecutar si no se cumple la condición:La identación es importante así como el uso correcto de {}.
Finalmente, si nos interesa que se muestre en la pantalla el resultado usamos la función print() o return().
Para usar nuestro condicionale debemos definir los argumentos de entrada (numero).
if y else05:00
if y else.
En R podemos vectorizar el condicional usando la función ifelse().
En lugar de escribir una línea de código para cada comparación, podemos usar una sola llamada a esta función, que se aplicará a cada elemento de un vector.
Esta función tiene la siguiente estructura:
ifelse()ifelse() para saber si los número en un vector son pares o nones:R, los bucles (loop) son estructuras de control de flujo que permiten repetir un bloque de código de forma cíclica ya sea un determinado número de veces o hasta que se cumpla una condición.forfor nos permite ejecutar un bucle ( loop ) realizando una operación para cada elemento de un conjunto de datos.R:
{}.forLas operaciones en un bucle for se realizan pero sus resultados nunca son devueltos automáticamente, es necesario pedirlos de manera explícita.
Una solución para mostrar los resultados de un bucle for es usar la función print().
print() sólo mostrará los resultados de las operaciones en la consola, no los asignará a un objeto.for a un objeto, usamos índices.R el primer elemento de un bucle siempre es identificado con el número 1, y se realizarán las operaciones hasta llegar al total de elementos que especifiquemos:forfor podemos generar un objeto vacío:for y vectorizaciónfor pueden obtenerse vectorizando la operación:R el uso de bucles for son poco populares ya que es más rápido y sencillo vectorizar las operaciones.whileEste es un tipo de bucle que ocurre mientras una condición es verdadera (TRUE). La operación se realiza hasta que se llega a cumplir un criterio previamente establecido.
La sintaxis de whilees la siguiente:
R:
whileProbemos sumar +1 a un valor, mientras que este sea menor que 5.
Advertencia
¡Ten cuidado de crear bucles infinitos! Si ejecutas una condición que nunca será FALSE, este nunca se detendra.
ESC para detener su ejecución. De otra forma, podría congelarse tu equipo.break y nextEn R las palabras break y next son palabras reservadas. Es decir, NO podemos asignarle nuevos valores y realizan una acción específica cuando aparecen en nuestro código.
break nos permite interrumpir un bucle.
next nos deja avanzar a la siguiente iteración saltándose la actual.
Ambas funciones pueden ser utilizadas en bucles de tipo for y while.
breakInterrumpimos un for cuando i es igual a 3, aunque aún queden 7 elementos en el objeto.
breakwhile antes de se cumpla la condición de que numero sea mayor a 5, en cuanto este tiene el valor de 15.nextPor su parte, usamos next para “saltarnos” una iteración en un bucle. Cuando la condición se cumple, esa iteración es omitida.
applyapplyLa familia de funciones apply es usada para aplicar una función a cada elemento de una estructura de datos (i.e., matrices, dataframes, arrays y listas).
Con esta familia de funciones podemos automatizar tareas complejas usando pocas líneas de código.
En el paradigma de R, la familia de funciones apply reciben como argumentos un objeto y al menos una función.
En este curso trabajaremos únicamente con las funciones más generales y de uso común de esta familia:
apply()lapply()apply()apply() aplica una función a todos los elementos de una matriz. - La estructura de esta función es la siguiente:
X: Una matriz o un objeto que puede coercionarse como matriz (dataframe).MARGIN: La dimensión (margen) que agrupará los elementos de la matriz X, para aplicar una función. 1 se refiere a las filas y 2 son columnas.FUN: La función que queremos aplicar al objeto X en su dimensión MARGIN.apply()data("mtcars") # Importamos datos de ejemplo
?mtcars
head(mtcars)
apply(mtcars,2,mean) # Promedio por columna
apply(mtcars,2,max) # Maximo por columna
apply(mtcars,2,min) # Mínimo por columna
# Ejemplo de uso de matrices
m <- matrix(seq(1:16), nrow = 4, ncol = 4)
m
apply(m, 1, min) # Mínimo por filasapply()También podemos definir funciones dentro de la función apply() y aplicarlas tanto por filas como por columnas:
apply() nos devuelve objetos del mismo tipo al que la función fue aplicadalapply()lapply() está diseñada para aplicar funciones a todos los elementos de una lista (por eso l).
X es una lista u objeto coercionable a una lista.FUN es la función a aplicar.MARGIN porque las listas son estructuras unidimensionales que solo tienen largo.lapply()PIBE_2020-2023.xlsx.R. Nota: usa la función read.csv().Usando la función apply() calcula el valor promedio del PIB de cada estado para el período 2020-2023. Guarda el resultado en una nueva variable denominada PIBE_promedio en el mismo dataframe.
Usando la función lapply() calcula el valor aproximado del PIB nacional para cada año. Guarda el resultado en una nueva variable denominada PIB_Nacional. Nota: Supon que puedes aproximar el valor del PIB nacional sumando el valor de los PIBE’s.
R base[ ]
Indexar elementos en objetos.
( )
Pasar argumentos a funciones.
{ }
Definir acciones de condicionales, funciones, bucles, etc.
R¿Qué tipo de datos conocemos?
numericcharacterfactorlogical¿Cómo podemos encontrar datos faltantes?
NA (No disponible)NULL (No existe)" " (Campo vacío)R¿Qué tipos de estructuras de datos existen?
vector (1-D)dataframe (2-D)list (M-D)¿Qué funciones hemos usado?
c()is.na()mean()apply()if-statmentsfunctionfor/ while-loop?mean() o help("mean").